/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package daw.data;

import daw.map.*;
import java.math.BigDecimal;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Transaction;
import org.hibernate.HibernateException;
import org.hibernate.Session;

/**
 *
 * @author Administrador
 */
public class Dao {

  
    
public Session sesion;
private Transaction tx;
  public Dao() {
    }
  
  
public void iniciaOperacion() throws HibernateException
{
    sesion = HibernateUtil.getSessionFactory().openSession();
    tx= sesion.beginTransaction();
    
}

public void manejaExcepcion(HibernateException he) throws HibernateException
{
        try {
            tx.rollback();
        } catch (Exception ex) {}
       
    throw new HibernateException("Ocurrió un error en la capa de acceso a datos", he);
}  
public long guardaUsuario(Usuario user)
{ 
    Integer id = 0;  

    try 
    { 
        iniciaOperacion(); 
        id = (Integer)sesion.save(user); 
            try {
                tx.commit();
            } catch (Exception ex) {

            }
    }catch(HibernateException he) 
    { 
        manejaExcepcion(he);
        throw he; 
    }finally 
    { 
        sesion.close(); 
    }  
    return id; 
}     
public  List<Usuario> obtenListaUsuarios() throws HibernateException 
{ 
    List<Usuario> listaContactos = null;  
    
    try 
    { 
        iniciaOperacion(); 
        listaContactos = sesion.createQuery("from Usuario").list(); 
    }finally 
    { 
        sesion.close(); 
    }  

    return listaContactos; 
}


public  List<Cancion> obtenListaCanciones(String idalbum) throws HibernateException 
{ 
    List<Cancion> listaContactos = null;  

    
    try 
    { 
        iniciaOperacion(); 
        listaContactos = sesion.createQuery("from Cancion").list(); 
     
             
      
    }finally 
    { 
        sesion.close(); 
    }  

    return listaContactos; 
}
  public void eliminaContacto(Album album) throws HibernateException 
{ 
    try 
    { 
        iniciaOperacion(); 
        sesion.delete(album); 
        tx.commit(); 
    } catch (HibernateException he) 
    { 
        manejaExcepcion(he); 
        throw he; 
    }finally 
    { 
        sesion.close(); 
    } 
}      
 public Album obtenContacto(int idAlbum) throws HibernateException
{ 
    Album album = null;  

    try 
    { 
        iniciaOperacion(); 
        album=(Album) sesion.get(Album.class, idAlbum); 
    } finally 
    { 
        sesion.close(); 
    }  
    return album; 
}   
 
 
 public Genero obtenGenero(int idGenero) throws HibernateException
{ 
    Genero genero = null;  

    try 
    { 
        iniciaOperacion(); 
        genero=(Genero) sesion.get(Genero.class, idGenero); 
    } finally 
    { 
        sesion.close(); 
    }  
    return genero; 
}   
    public void actualizaAlbum(Album album) throws HibernateException 
    { 
        try 
        { 
            iniciaOperacion(); 
            sesion.update(album); 
            tx.commit(); 
        } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
        { 
            sesion.close(); 
        } 
    }  
public  List<Album> obtenListaAlbum() throws HibernateException 
{ 
    List<Album> listaContactos = null;  
    
    try 
    { 
        iniciaOperacion(); 
        listaContactos = sesion.createQuery("from Album").list(); 
    }finally 
    { 
        sesion.close(); 
    }  

    return listaContactos; 
}
    
   public void eliminaCancion(String idCancion) throws HibernateException 
    {
        
    List<Cancion> listaContactos = null;  
    try 
    {  
        iniciaOperacion(); 
                sesion.createQuery("delete from Cancion where idCancion="+"'"+idCancion+"'"+"").executeUpdate(); 

            tx.commit(); 
        } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
        { 
            sesion.close(); 
        } 

    }
      public void ingresaCancion(String idAlbum,String genero,String nombre,String duracion ,String url,String canvisitas) throws HibernateException 
    {
       int idAlbumnew=Integer.parseInt(idAlbum);
       int generonew=Integer.parseInt(genero);
       int canvisitasnew=Integer.parseInt(canvisitas);
        Album album=obtenContacto(idAlbumnew);
        Genero g=obtenGenero(generonew);
     
        
    
        Cancion cancion =new Cancion();
        cancion.setNombre(nombre);
        cancion.setUrl(duracion);
        cancion.setAlbum(album);
        cancion.setCantvisitas(canvisitasnew);      
        cancion.setGenero(g);
        try{
            
            iniciaOperacion();
            
            
            sesion.save(cancion); 
            tx.commit(); 
        } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
        { 
            sesion.close(); 
        }  

        


    }
      public List<Cancion> generaTopCanciones(){
     List<Cancion> listaTop = null;
     try 
     { 
        iniciaOperacion(); 
        listaTop = sesion.createQuery("from Cancion where rownum<5").list(); 
   } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
    { 
        sesion.close(); 
    }  

  
          return listaTop;
                  
      }
     public List<Album> generaTopAlbumes(){
     List<Album> listaTop = null;
     try 
     { 
        iniciaOperacion(); 
        listaTop = sesion.createQuery("from Album where rownum<5").list(); 
   } catch (HibernateException he) 
        { 
            manejaExcepcion(he); 
            throw he; 
        } finally 
    { 
        sesion.close(); 
    }  

  
          return listaTop;
                  
      }
     
     
   
}  
